Add mmio utility functions
authorJimmy Huang <[email protected]>
Fri, 31 Jul 2015 05:48:22 +0000 (13:48 +0800)
committerYidi Lin <[email protected]>
Wed, 5 Aug 2015 11:55:06 +0000 (19:55 +0800)
- Add mmio 16 bits read/write functions.
- Add clear/set/clear-and-set utility functions.

Change-Id: I00fdbdf24af537424f8666b1cadaa5f77a2a46ed
Signed-off-by: Jimmy Huang <[email protected]>
include/lib/mmio.h

index cb37a1c89c29cc39f343b19cff4fcf79022404be..19f798f46488ed43b1ecba65bebd5b7d6be8a6f6 100644 (file)
@@ -43,6 +43,16 @@ static inline uint8_t mmio_read_8(uintptr_t addr)
        return *(volatile uint8_t*)addr;
 }
 
+static inline void mmio_write_16(uintptr_t addr, uint16_t value)
+{
+       *(volatile uint16_t*)addr = value;
+}
+
+static inline uint16_t mmio_read_16(uintptr_t addr)
+{
+       return *(volatile uint16_t*)addr;
+}
+
 static inline void mmio_write_32(uintptr_t addr, uint32_t value)
 {
        *(volatile uint32_t*)addr = value;
@@ -63,4 +73,21 @@ static inline uint64_t mmio_read_64(uintptr_t addr)
        return *(volatile uint64_t*)addr;
 }
 
+static inline void mmio_clrbits_32(uintptr_t addr, uint32_t clear)
+{
+       mmio_write_32(addr, mmio_read_32(addr) & ~clear);
+}
+
+static inline void mmio_setbits_32(uintptr_t addr, uint32_t set)
+{
+       mmio_write_32(addr, mmio_read_32(addr) | set);
+}
+
+static inline void mmio_clrsetbits_32(uintptr_t addr,
+                               uint32_t clear,
+                               uint32_t set)
+{
+       mmio_write_32(addr, (mmio_read_32(addr) & ~clear) | set);
+}
+
 #endif /* __MMIO_H__ */